package bdsimple.impl.mysql;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.CiudadDAO;
import bdsimple.dao.base.CiudadDistanciaDAO;
import bdsimple.dao.base.CiudadRecursoDAO;
import bdsimple.dao.base.CiudadVampiroDAO;
import bdsimple.dao.base.PrecioItemCiudadDAO;
import bdsimple.dao.base.VampiroDAO;
import bdsimple.dto.base.CiudadDTO;
import bdsimple.dto.base.CiudadDistanciaDTO;
import bdsimple.dto.base.CiudadRecursoDTO;
import bdsimple.dto.base.CiudadVampiroDTO;
import bdsimple.dto.base.PrecioItemCiudadDTO;
import bdsimple.dto.base.PropiedadVampiroDTO;
import bdsimple.dto.base.VampiroDTO;
import dao.base.impl.BaseDTO;

public class CiudadDTOImpl extends BaseDTO implements CiudadDTO {

	public CiudadDTOImpl() {
		super(CiudadDAO.class);
	}

	// ---------------------------------------------------------------------------

	private String nombre;

	private String descripcion;

	// private Image imagen;

	private int ptosExperiencia;

	private List<PropiedadVampiroDTO> propiedadVampiroDTOList;

	private List<CiudadVampiroDTO> ciudadVampiroDTOList;

	private List<VampiroDTO> vampiroDTOList;

	private List<PrecioItemCiudadDTO> precioItemCiudadDTOList;

	private List<CiudadRecursoDTO> ciudadRecursoDTOList;

	private List<CiudadDistanciaDTO> ciudadDistanciaDTOListPartida;

	private List<CiudadDistanciaDTO> ciudadDistanciaDTOListObjetivo;

	// ---------------------------------------------------------------------------

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	// ---------------------------------------------------------------------------

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	// ---------------------------------------------------------------------------

	public int getPtosExperiencia() {
		return ptosExperiencia;
	}

	public void setPtosExperiencia(int ptosExperiencia) {
		this.ptosExperiencia = ptosExperiencia;
	}

	// ---------------------------------------------------------------------------

	public List<PropiedadVampiroDTO> getPropiedadVampiroDTOList() {
		return propiedadVampiroDTOList;
	}

	public void setPropiedadVampiroDTOList(
			List<PropiedadVampiroDTO> propiedadVampiroDTOList) {
		this.propiedadVampiroDTOList = propiedadVampiroDTOList;
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<CiudadVampiroDTO> getCiudadVampiroDTOList() {
		if (ciudadVampiroDTOList == null) {
			try {

				// Lazy load the list
				CiudadVampiroDAO ciudadVampiroDAO = (CiudadVampiroDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(CiudadVampiroDAO.class, connectionBean);

				ciudadVampiroDTOList = new ArrayList<CiudadVampiroDTO>();
				ciudadVampiroDTOList
						.addAll((Collection<? extends CiudadVampiroDTO>) // 
						ciudadVampiroDAO.listBy(CiudadVampiroDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return ciudadVampiroDTOList;
	}

	public void setCiudadVampiroDTOList(
			List<CiudadVampiroDTO> ciudadVampiroDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<VampiroDTO> getVampiroDTOList() {
		if (vampiroDTOList == null) {
			try {

				// Lazy load the list
				VampiroDAO vampiroDAO = (VampiroDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(VampiroDAO.class, connectionBean);

				vampiroDTOList = new ArrayList<VampiroDTO>();
				vampiroDTOList.addAll((Collection<? extends VampiroDTO>) // 
						vampiroDAO
								.listBy(VampiroDTOImpl.CIUDAD_REFERENCIA, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return vampiroDTOList;
	}

	public void setVampiroDTOList(List<VampiroDTO> vampiroDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<PrecioItemCiudadDTO> getPrecioItemCiudadDTOList() {
		if (precioItemCiudadDTOList == null) {
			try {

				// Lazy load the list
				PrecioItemCiudadDAO precioItemCiudadDAO = (PrecioItemCiudadDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(PrecioItemCiudadDAO.class, connectionBean);

				precioItemCiudadDTOList = new ArrayList<PrecioItemCiudadDTO>();
				precioItemCiudadDTOList
						.addAll((Collection<? extends PrecioItemCiudadDTO>) // 
						precioItemCiudadDAO.listBy(PrecioItemCiudadDTOImpl.ID,
								id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return precioItemCiudadDTOList;
	}

	public void setPrecioItemCiudadDTOList(
			List<PrecioItemCiudadDTO> precioItemCiudadDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<CiudadRecursoDTO> getCiudadRecursoDTOList() {
		if (ciudadRecursoDTOList == null) {
			try {

				// Lazy load the list
				CiudadRecursoDAO ciudadRecursoDAO = (CiudadRecursoDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(CiudadRecursoDAO.class, connectionBean);

				ciudadRecursoDTOList = new ArrayList<CiudadRecursoDTO>();
				ciudadRecursoDTOList
						.addAll((Collection<? extends CiudadRecursoDTO>) // 
						ciudadRecursoDAO.listBy(CiudadRecursoDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return ciudadRecursoDTOList;
	}

	public void setCiudadRecursoDTOList(
			List<CiudadRecursoDTO> ciudadRecursoDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<CiudadDistanciaDTO> getCiudadDistanciaDTOListPartida() {
		if (ciudadDistanciaDTOListPartida == null) {
			try {

				// Lazy load the list
				CiudadDistanciaDAO ciudadDistanciaDAO = (CiudadDistanciaDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(CiudadDistanciaDAO.class, connectionBean);

				ciudadDistanciaDTOListPartida = new ArrayList<CiudadDistanciaDTO>();
				ciudadDistanciaDTOListPartida.addAll((Collection<? extends CiudadDistanciaDTO>) // 
						ciudadDistanciaDAO.listBy(CiudadDistanciaDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return ciudadDistanciaDTOListPartida;
	}

	public void setCiudadDistanciaDTOListPartida(
			List<CiudadDistanciaDTO> ciudadDistanciaDTOListPartida) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<CiudadDistanciaDTO> getCiudadDistanciaDTOListObjetivo() {
		if (ciudadDistanciaDTOListObjetivo == null) {
			try {

				// Lazy load the list
				CiudadDistanciaDAO ciudadDistanciaDAO = (CiudadDistanciaDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(CiudadDistanciaDAO.class, connectionBean);

				ciudadDistanciaDTOListObjetivo = new ArrayList<CiudadDistanciaDTO>();
				ciudadDistanciaDTOListObjetivo.addAll((Collection<? extends CiudadDistanciaDTO>) // 
						ciudadDistanciaDAO.listBy(CiudadDistanciaDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return ciudadDistanciaDTOListObjetivo;
	}

	public void setCiudadDistanciaDTOListObjetivo(
			List<CiudadDistanciaDTO> ciudadDistanciaDTOListObjetivo) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------
}
